From 59e7571aae6f61984cc0e5737e482feb33ef9f20 Mon Sep 17 00:00:00 2001 From: Tristan Van Berkom Date: Fri, 6 Aug 2010 22:44:11 -0400 Subject: [PATCH] Fixed alignment of wrapping labels allocated a greater width than needed When wrapping labels to allocation width, never set the label wrap width to a size greater than needed for the label's text (closes bug 625715) --- gtk/gtklabel.c | 23 ++++++++--------------- 1 file changed, 8 insertions(+), 15 deletions(-) diff --git a/gtk/gtklabel.c b/gtk/gtklabel.c index d712cc6595..2f4c91ee13 100644 --- a/gtk/gtklabel.c +++ b/gtk/gtklabel.c @@ -3250,7 +3250,8 @@ gtk_label_ensure_layout (GtkLabel *label, gboolean guess_wrap_width) else if (guess_wrap_width == FALSE && widget->allocation.width > 1 && widget->allocation.height > 1) { - gint xpad, ypad; + PangoRectangle rect; + gint xpad, ypad, natural_width; gtk_misc_get_padding (GTK_MISC (label), &xpad, &ypad); if (angle == 90 || angle == 270) @@ -3258,6 +3259,12 @@ gtk_label_ensure_layout (GtkLabel *label, gboolean guess_wrap_width) else width = widget->allocation.width - xpad * 2; + /* dont set a wrap width wider than the label's natural width + * incase we're allocated more space than needed */ + pango_layout_get_extents (priv->layout, NULL, &rect); + natural_width = PANGO_PIXELS (rect.width); + width = MIN (natural_width, width); + pango_layout_set_wrap (priv->layout, priv->wrap_mode); pango_layout_set_width (priv->layout, MAX (width, 1) * PANGO_SCALE); } @@ -3843,18 +3850,6 @@ get_layout_location (GtkLabel *label, pango_layout_get_extents (priv->layout, NULL, &logical); - /* Do the wrap width delimiting before the transform - */ - if (priv->wrap || priv->ellipsize || priv->width_chars > 0) - { - int width; - - width = pango_layout_get_width (priv->layout); - - if (width != -1) - logical.width = MIN (width, logical.width); - } - if (priv->have_transform) { PangoContext *context = gtk_widget_get_pango_context (widget); @@ -3879,8 +3874,6 @@ get_layout_location (GtkLabel *label, x = MIN (x, widget->allocation.x + widget->allocation.width - xpad); - - /* bgo#315462 - For single-line labels, *do* align the requisition with * respect to the allocation, even if we are under-allocated. For multi-line * labels, always show the top of the text when they are under-allocated. The -- 2.30.2